import { fileURLToPath, URL } from 'node:url'
import path from 'node:path'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
// 自动引入函数
import AutoImport from 'unplugin-auto-import/vite'
// 自动引入组件
import Components from 'unplugin-vue-components/vite'
// 自动引入vant
import { VantResolver } from '@vant/auto-import-resolver'
// 自动引入图标
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
// mock
import { viteMockServe } from 'vite-plugin-mock'

const pathSrc = fileURLToPath(new URL('./src', import.meta.url)) // src目录
const pathPublic = fileURLToPath(new URL('./public', import.meta.url)) // public目录
const pathRoot = fileURLToPath(new URL('./', import.meta.url)) // 根目录

// https://vite.dev/config/
export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, pathRoot)
  console.log('env:', env)
  return {
    appType: 'spa', // spa单页应用
    root: pathRoot, // index.html所在的目录
    base: env.VITE_APP_BASE_URL, // 公共基础路径
    publicDir: pathPublic, // 静态资源目录
    cacheDir: 'node_modules/.vite', // 缓存目录
    envDir: pathRoot, // 环境变量目录
    envPrefix: 'VITE_', // 环境变量前缀，默认是'VITE_'
    logLevel: 'info', // 日志级别，默认是'info'
    plugins: [
      vue(),
      vueDevTools(),
      AutoImport({
        dts: 'src/types/auto-imports.d.ts',
        resolvers: [VantResolver()],
      }),
      Components({
        dts: 'src/types/components.d.ts',
        resolvers: [VantResolver()],
      }),

      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(pathSrc, 'assets/icons')],
        // 指定symbolId格式
        symbolId: 'icon-[dir]-[name]',
      }),

      viteMockServe({
        mockPath: 'src/mock', // mock文件夹
        enable: true, // 开启mock
        logger: true, // 打印日志
      }),
    ],
    css: {
      preprocessorOptions: {
        scss: {
          api: 'modern-compiler',
          // additionalData: `@use "@/styles/element/index.scss" as *;`,
          additionalData: `@use "@/styles/variables.scss" as *;`,
        },
      },
    },
    resolve: {
      alias: {
        '@': pathSrc,
      },
      extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json'], // 导入时想要省略的扩展名
    },
    server: {
      // host: 'localhost', // 主机名
      host: '0.0.0.0', // 主机名
      port: parseInt(env.VITE_APP_PORT), // 端口号
      open: true, // 自动打开浏览器
      proxy: {
        [env.VITE_APP_BASE_API]: {
          target: env.VITE_APP_BASE_URL,
          changeOrigin: true,
          rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_API}`), ''),
        },
      },
    },
    build: {
      target: 'modules',
      outDir: 'dist', // 打包输出目录
      emptyOutDir: true, // 打包前清空输出目录
      assetsDir: 'assets', // 静态资源目录
      assetsInlineLimit: 4096, // 小于4k的导入或引用资源将内联为 base64 编码
      cssCodeSplit: true, // 启用CSS代码拆分
      sourcemap: false, // 生产环境禁用sourcemap
      chunkSizeWarningLimit: 500, // 打包后单个chunk大小超过500k警告
    },
    preview: {
      host: 'localhost', // 主机名
      port: parseInt(env.VITE_APP_PORT), // 端口号
      open: true, // 自动打开浏览器
    },
  }
})
